package com.zzyl.properties;

import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import lombok.ToString;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Configuration;

import java.io.Serializable;

/**
 * jwt配置文件
 */
/**
 * JWT Token
 *      用途：用户登录状态凭证
 *      生成方式：开发者服务器自己生成
 *      包含信息：用户ID、用户名等业务数据
 *      使用场景：前后端接口身份验证
 * <p>
 *      1.在登录逻辑(login())中生成JWT Token：
 *                      String token = JwtUtil.createJWT()
 *      2.返回给前端：
 *                      LoginVo loginVo = new LoginVo();
 *                      loginVo.setToken(token); // 这个就是JWT Token
 *                      return ResponseResult.success(loginVo);
 *      3.前端存储并发送
 *                      前端收到后存入storage
 *                      前端每次向开发者服务器发送请求时，将JWT Token放在Header中
 *      4.拦截器验证
 *                      拦截器验证并解析JWT Token -- com/zzyl/intercept/UserInterceptor.java
 *                      解析成功：将HTTP请求放行到Controller
 * <p>
 * 微信平台的 Token    com.zzyl.service.impl.WechatServiceImpl#getToken()
 *      用途：调用微信API的凭证
 *      获取方式：<a href="https://api.weixin.qq.com/cgi-bin/token">...</a>
 *      包含信息：access_token，有效期2小时
 *      使用场景：服务器调用微信各种接口
 * <p>
 * 总结对比
 * 特征	    微信平台 Token	您的 JWT Token
 * 生成方	微信平台	        您的服务器
 * 用途	    调用微信API	    用户登录状态
 * 数据	    无用户信息	    包含用户业务数据
 * 密钥	    appsecret	    自己配置的secretKey
 * 有效期	2小时	        自己配置的ttl
 */
@Setter
@Getter
@NoArgsConstructor
@ToString
@Configuration
@ConfigurationProperties(prefix = "zzyl.framework.jwt")
public class JwtTokenManagerProperties implements Serializable {

    /**
     *  签名密码
     */
    private String base64EncodedSecretKey;

    /**
     *  有效时间
     */
    private Integer ttl;
}